/**
 * @desc 主窗口属性
 * @date 2020/11/06
 * @auther ZongLou
 */
const { app, BrowserWindow, Menu, dialog } = require('electron');

let mainWindow = null;

// 创建窗口
function createWindow(callback) {
  const winConf = {
    title: 'Code++创客教育',
    show: true,
    center: true,
    resizable: true,
    movable: true, // 可否移动
    minimizable: true, // 可否最小化
    maximizable: true, // 可否最大化
    fullscreen: false, // 窗口是否全屏
    skipTaskbar: false, // 在任务栏中显示窗口
    acceptFirstMouse: true, // 是否允许单击页面来激活窗口
    closable: true,
    // backgroundColor: '#4DC9FF', // 背景色
    allowRunningInsecureContent: true, // 允许一个 https 页面运行 http url 里的资源
    frame: true,
    webPreferences: {
      devTools: true, // 是否打开调试模式
      webSecurity: true, // 禁用安全策略
      allowDisplayingInsecureContent: true, // 允许一个使用 https 的界面来展示由 http URLs 传过来的资源
      allowRunningInsecureContent: true, // 允许一个 https 页面运行 http url 里的资源
      nodeIntegration: true, // 5.x以上版本，默认无法在渲染进程引入node模块，需要这里设置为true
    },
  };
  // 隐藏菜单
  Menu.setApplicationMenu(null);
  mainWindow = new BrowserWindow(winConf);
  mainWindow.maximize();
  // 加载主页
  mainWindow.loadURL('http://127.0.0.1:13865/home');

  // 打开调试
  // mainWindow.webContents.openDevTools();

  // 监听关闭
  mainWindow.on('close', async (event) => {
    event.preventDefault();
    mainWindow.focus();
    const index = await dialog.showMessageBoxSync({
      type: 'warning',
      title: '退出应用',
      defaultId: 0,
      message: '退出应用',
      detail: '确定关闭桌面应用？',
      buttons: ['取消', '继续退出'],
      noLink: true, // windows弹框样式
      cancelId: 0, // windows关闭弹框
    });
    if (index == 1) {
      mainWindow = null;
      app.exit();
    }
  });

  // 关闭后
  mainWindow
    .on('closed', function () {
      mainWindow = null;
    })
    .once('ready-to-show', function () {
      // 先不显示
      if (callback instanceof Function) {
        callback(mainWindow);
      }
      mainWindow.show();
    });
  return mainWindow;
}

module.exports = {
  create(callback) {
    if (mainWindow && !mainWindow.isDestroyed()) {
      mainWindow.destroy();
    }
    mainWindow = createWindow(callback);
    return mainWindow;
  },
};
